package com.xyy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xyy.common.PageResult;
import com.xyy.entity.User;

import java.util.List;
import java.util.Map;

/**
 * 用户服务接口
 */
public interface UserService extends IService<User> {

    /**
     * 用户注册
     */
    Map<String, Object> register(User user);

    /**
     * 用户登录
     */
    Map<String, Object> login(User user);

    /**
     * 发送邮箱验证码
     */
    void sendEmailCode(String email);

    /**
     * 密码重置
     */
    void resetPassword(User user);

    /**
     * 根据用户名查询用户
     */
    User getUserByUsername(String username);

    /**
     * 根据邮箱查询用户
     */
    User getUserByEmail(String email);

    /**
     * 根据手机号查询用户
     */
    User getUserByPhone(String phone);

    /**
     * 更新用户最后登录信息
     */
    void updateLastLoginInfo(Long userId, String ip);

    /**
     * 验证用户名和邮箱是否匹配
     */
    void validateUserEmail(String username, String email);
    
    /**
     * 发送注册邮箱验证码
     */
    void sendRegisterEmailCode(String email);
    
    /**
     * 验证注册邮箱验证码
     */
    boolean verifyRegisterEmailCode(String email, String code);
    
    /**
     * 验证密保问题
     */
    boolean verifySecurityQuestions(String username, String favoriteFood, String favoritePlace, String favoriteSchool);
    
    /**
     * 验证邮箱验证码
     */
    boolean verifyEmailCode(String username, String email, String emailCode);
    
    /**
     * 更新用户头像
     */
    void updateUserAvatar(Long userId, String avatarUrl);



    void updateUser(User user);

    /**
     * 软删除用户
     */
    void deleteUser(Long userId);

    /**
     * 批量软删除用户
     */
    void batchDeleteUser(List<Long> userIds);

    /**
     * 分页查询用户
     */
    PageResult<User> pageQueryUsers(User user, Integer current, Integer size);

    /**
     * 根据ID查询用户详情
     */
    User getUserById(Long userId);

    /**
     * 启用/禁用用户
     */
    void toggleUserStatus(Long userId, Integer status);

    /**
     * 分页查询已删除的用户
     */
    PageResult<User> getDeletedUsersPage(Integer current, Integer size);

    /**
     * 恢复软删除的用户
     */
    void restoreUser(Long userId);

    /**
     * 批量恢复软删除的用户
     */
    void batchRestoreUsers(List<Long> userIds);

    /**
     * 永久删除用户
     */
    void permanentlyDeleteUser(Long userId);

    /**
     * 批量永久删除用户
     */
    void batchPermanentlyDeleteUsers(List<Long> userIds);
} 